
package Proyecto;

import java.util.ArrayList;

public class BusquedaAvara {
    MonticuloBinario arreglo=new MonticuloBinario();
    String estado[][];
    int nElementos=0;
    int nodosCreados,nodosExpandidos;
    long tiempoInicio,duracion;

    public BusquedaAvara(String[][] estado) {
        this.estado = estado;        
        tiempoInicio=System.currentTimeMillis();
        
    }

    public int RetornarNodosCreados()
    {
      return nodosCreados;
    }

    public int RetornarNodosExpandidos()
    {
      return nodosExpandidos;
    }

    public Nodo AlgoritmoBusquedaAvara()
    {
        nodosCreados=0;
        nodosExpandidos=0;
        nElementos++;
        nodosCreados++;
        nodosExpandidos++;
        Nodo actual=new Nodo(estado,0,null,null,0); 
        if(actual.Viabilidad())
        {
            while(!actual.EsMeta())
            {
                //ArrayList hijos=actual.expandir();
                ArrayList hijos=actual.expandirOrdenExpansion();
                nodosExpandidos++;
                nodosCreados+=hijos.size();
                for (int i = 0; i < hijos.size(); i++) {
                    Nodo hijo=(Nodo) hijos.get(i);
                    arreglo.Ingresar(new Object[]{hijo.calcularHeuristica(),hijo});
                }
                actual=(Nodo)(arreglo.ExtraerMin())[1];
            }
            duracion=System.currentTimeMillis()-tiempoInicio;
            System.out.println("Meta hallada =D");
            return actual;
       }else return null; 
    }
}
    